﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// NotReviewedButNeeded

#pragma once

#include "GcmpGuiMainFrameInterface.h"
#include "IStatusBarPanel.h"

#include <string>

namespace gcmp
{

/// \brief 状态栏
class GCMP_GUI_MAIN_FRAME_INTERFACE_EXPORT IStatusBar
{
public:
    /// \brief 析构函数
    virtual ~IStatusBar() = 0;

    /// \brief 获取状态栏面板
    ///
    /// \param panelId 面板id
    /// \return 状态栏面板指针
    /// \see IStatusBarPanel
    virtual IStatusBarPanel* GetPanel(const std::wstring& panelId) const = 0;

    /// \brief 添加状态栏面板
    ///
    /// 状态栏分成左右两大区域，每个区域内都可以在后面添加状态栏面板。左侧区域左为前右为后，右侧区域右为前左为后。面板名必须在状态栏上唯一。
    /// \param pPanel 状态栏面板指针
    /// \param alignment 添加在左半区还是右半区
    /// \return 添加成功返回true，否则返回false（比如要添加的面板名已经存在）
    /// \see IStatusBarPanel, StatusBarAlignment
    virtual bool AppendPanel(OwnerPtr<IStatusBarPanel> pPanel, StatusBarAlignment alignment) = 0;

    /// \brief 插入状态栏面板
    ///
    /// 在followingPanelId之前插入面板，面板名必须在状态栏上唯一
    /// \param followingPanelId 参考面板
    /// \param pPanel 状态栏面板指针
    /// \return 插入成功返回true，否则返回false（比如要添加的面板名已经存在）
    /// \see IStatusBarPanel, AppendPanel
    virtual bool InsertPanel(const std::wstring& followingPanelId, OwnerPtr<IStatusBarPanel> pPanel) = 0;
    
    /// \brief 删除状态栏面板
    ///
    /// \param panelId 要删除的状态栏面板名
    /// \return 删除成功返回true，否则返回false（比如要删除的面板名不存在）
    virtual bool DeletePanel(const std::wstring& panelId) = 0;

    /// \brief 更新状态栏上每个控件的状态，会调用每个状态栏面板的UpdateControlStatus方法
    virtual void UpdateControlStatus() = 0;
};

}   // end namespace gcmp
